package com.knowledgegraph.service;

import com.knowledgegraph.entity.RelationType;
import com.knowledgegraph.common.PageResult;
import com.knowledgegraph.vo.RelationTypeVO;

import java.util.List;

/**
 * 关系类型服务接口
 */
public interface RelationTypeService {

    /**
     * 分页查询关系类型
     *
     * @param page 页码
     * @param pageSize 每页大小
     * @param searchText 搜索文本
     * @param onlyCurrentUser 是否只查询当前用户创建的类型
     * @return 分页结果
     */
    PageResult<RelationTypeVO> getRelationTypes(Integer page, Integer pageSize, String searchText, Boolean onlyCurrentUser);

    /**
     * 获取关系类型详情
     *
     * @param id 关系类型ID
     * @return 关系类型详情
     */
    RelationTypeVO getRelationTypeById(Long id);

    /**
     * 创建关系类型
     *
     * @param relationType 关系类型信息
     * @return 创建的关系类型ID
     */
    Long createRelationType(RelationType relationType);

    /**
     * 更新关系类型
     *
     * @param relationType 关系类型信息
     * @return 是否更新成功
     */
    Boolean updateRelationType(RelationType relationType);

    /**
     * 删除关系类型
     *
     * @param id 关系类型ID
     * @return 是否删除成功
     */
    Boolean deleteRelationType(Long id);

    /**
     * 批量删除关系类型
     *
     * @param ids 关系类型ID列表
     * @return 删除的数量
     */
    Integer batchDeleteRelationTypes(List<Long> ids);

    /**
     * 更新关系类型排序
     *
     * @param id 关系类型ID
     * @param sortOrder 排序序号
     * @return 是否更新成功
     */
    Boolean updateSortOrder(Long id, Integer sortOrder);

    /**
     * 更新关系类型启用状态
     *
     * @param id 关系类型ID
     * @param enabled 启用状态
     * @return 是否更新成功
     */
    Boolean updateEnabled(Long id, Boolean enabled);

    /**
     * 获取所有启用的关系类型
     *
     * @return 关系类型列表
     */
    List<RelationTypeVO> getAllEnabledTypes();

    /**
     * 获取当前用户创建的关系类型
     *
     * @return 关系类型列表
     */
    List<RelationTypeVO> getCurrentUserTypes();
}